
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
#include <linux/fb.h>
#include <errno.h>

void display_text(const char *text) {
    // 打开framebuffer设备
    int fb = open("/dev/fb0", O_RDWR);
    if (fb == -1) {
        perror("Error opening framebuffer device");
        return;
    }

    // 获取屏幕信息
    struct fb_var_screeninfo vinfo;
    if (ioctl(fb, FBIOGET_VSCREENINFO, &vinfo)) {
        perror("Error reading variable information");
        close(fb);
        return;
    }

    // 计算屏幕尺寸
    int width = vinfo.xres;
    int height = vinfo.yres;
    int bpp = vinfo.bits_per_pixel / 8;
    int screen_size = width * height * bpp;

    // 映射framebuffer
    unsigned int *framebuffer = mmap(NULL, screen_size, PROT_READ | PROT_WRITE, MAP_SHARED, fb, 0);
    if (framebuffer == MAP_FAILED) {
        perror("Error mapping framebuffer");
        close(fb);
        return;
    }

    // 清屏（填充黑色）
    for (int i = 0; i < width * height; i++) {
        framebuffer[i] = 0xffffffff; // 黑色
    }

    // 在这里你可以绘制文本, 例如通过字体渲染
    // 但直接操作framebuffer显示“Hello World”通常需要库或者自定义渲染函数

    // 显示一些简单的文本或图形（例如用像素绘制）

    // 关闭framebuffer设备
    munmap(framebuffer, screen_size);
    close(fb);
}

int main() {
    display_text("Hello World");
    return 0;
}
